热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

Haskell中`->`,`=`和``的优先顺序是什么?

如何解决《Haskell中`->`,`=`和``的优先顺序是什么?》经验,为你挑选了1个好方法。

我想在Haskell找出一些默认的运算符优先,但我无法找到一些好的文档->=(在f x)。于是,我就:i (->):i (=)在GHCI得到一些信息,但它给了我一个语法错误。

显然,这些“令牌”只是语法的内置部分,因此:i也就不足为奇了。

我是Haskell的新手,所以我不知道这个事实,=它不会返回任何值,我只是错误地认为,它在命令式语言中的行为等同于它,这当然是错误的。

->并且,在另一方面,表现为经营者。它们分别返回类型/值和右/左关联。与实际操作员一起使用时,它们具有某种性能。



1> AJFarmar..:

->是类型级别的运算符((->) :: * -> * -> *),如注释中所述,:i (->)表明它是infixr 0*。

功能应用可以视为具有“无限高”左优先,也就是说,如果%是任何运营商,那么f x % y将永远被理解为(f x) % y不管是什么优先级%了,而且f x y z总是读为((f x) y) z**这是不记录为有优先级,因为它不是运算符,并且无法在Haskell中声明“无限”优先级。

=不能将其视为具有优越性,因为它始终是声明而不是表达式,因此在其周围加上括号是荒谬的。它不是运算符,因此不能具有优先级。


*如以下注释中所指出的那样,实际上它的行为就好像具有优先级infixr -1,但这在普通运算符中是不允许的-这是语法而不是语义。

**请注意,这是与的“对立” ->,可以看作具有“无限低”的正确优先级。你知道为什么这是自然的吗?


关于((->)`的脚注:尽管GHCi说了什么,但它的优先级是`-1`而不是`0',如[GHC问题#15235](https://gitlab.haskell.org/ ghc / ghc / issues / 15235)(已在GHC 8.8.1中设置为固定)。
同样值得注意的是,记录更新`x {y = z}`和构造`X {y = z}`的优先级高于函数应用程序,因此您可以执行例如“ pure SomeRecord {srValue = 42}”而不是“ pure $”。 SomeRecord…`
推荐阅读
author-avatar
Li_pengwei
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有